package org.freedoit.server.service.task;

import java.lang.reflect.Type;

import org.freedoit.common.data.FreeDoitTaskRequest;
import org.freedoit.common.data.FreeDoitTaskResponse;
import org.freedoit.common.shared.SharedTask;

public abstract class AbstractTaskServletImpl extends AbstractTaskServlet<FreeDoitTaskRequest, FreeDoitTaskResponse> {

	/**
	 * 
	 */
	private static final long serialVersionUID = -5003094136199773219L;

	/**
	 * 
	 */

	protected FreeDoitTaskResponse createResponseObject() {
		// TODO Auto-generated method stub
		return new FreeDoitTaskResponse();
	}
	protected abstract void workOnTask(SharedTask sharedTask, Long currentUserId, Long currentClientId, FreeDoitTaskResponse result,
			Long timestamp);

	protected void processRequest(
			ServiceContext<FreeDoitTaskRequest, FreeDoitTaskResponse> context,
			Long timestamp) {
		// TODO Auto-generated method stub
		SharedTask task = context.getRequestObject().getTask();
		if (task == null) {
			context.getResponseObject().setCode(FreeDoitTaskResponse.CODE_INVALID_REQUEST);
			return;
		}
		
		// work on task object
		workOnTask(task, context.getCurrentUserId(), 
				context.getCurrentClientId(), context.getResponseObject(), timestamp);
	}
	
	protected Type getRequestType() {
		return new com.google.gson.reflect.TypeToken<FreeDoitTaskRequest>() {  
		}.getType();
	}
	
}
